home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1995 November
/
EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso
/
earcd
/
gfx
/
vtdevel3.lha
/
SourceAGA
/
PictureFade.s
< prev
next >
Wrap
Text File
|
1994-06-27
|
57KB
|
2,797 lines
;picturefade
rout ;when this is off, the routine-file will be
;assembled, on=testing
;debug ;when this is on, colors in the background will
;show how much time the routine needs.
;ntsctest ;when this is on, the routineplayer is in ntsc-mode
;ocs ;off=AGA,on=OCS testing not possible on OCS !
routinemode equ 100*256+17 ;the routinemode !
; VideoTracker AGA developer source 25-12-93
; 24-bits colors, Super-HiRes, HAM8, maximum burstmode (64 pixels aligned)
; wich makes low-resolution overscan a bit ugly.
; no "interactive" support anymore, it's only used by Kick 1.3 users.
; the first part of the source handles the things that are necessary to
; show the picture/copper and playing of the routine.
; the part between the "***" lines is the routine-source.
; at the bottom of the file, there are the necessary incbin-files who
; are needed to test the routine.
; these are saved with "save effect" in videotracker. they are raw
; data files which can be fonts,pictures,landscapes,vectorobjects
; etcetra.
; the incbin-files are put in the "variables" table, in the routine
; player-handler
; the place where it's done can be found by searching for "!!!"
opt a+ ;devpac 3 optimize
opt o+
vew_wid equ 48
vew_hgt equ 290
win_hgt equ 117
win_str equ $1a
ifd ocs
pic_wid equ 4 ;wide in bytes
pic_hgt equ 6 ;hoogte
pic_dpt equ 8 ;number planes
pic_ani equ 10 ;aantal effes (anim)
pic_vew equ 12 ;viewmode
pic_cycstr equ 14 ;cycle start (*4)
pic_cycend equ 15 ;cycle end (*4)
pic_cycspd equ 16 ;cycle speed (*4)
pic_cycadd equ 17 ;cycle add (*4)
pic_palnum equ 30 ;aantal kleuren
pic_pal equ 32 ;palette start
pic_palsiz equ 256*2 ;vaste palette size
pic_raw equ pic_pal+pic_palsiz ;palette start
endc
ifnd ocs
pic_wid equ 4 ;wide in bytes
pic_hgt equ 6 ;hoogte
pic_dpt equ 8 ;number planes
pic_ani equ 10 ;aantal effes (anim)
pic_vew equ 12 ;viewmode
pic_cycstr equ 14 ;cycle start (*8)
pic_cycend equ 15 ;cycle end (*8)
pic_cycspd equ 16 ;cycle speed (*8)
pic_cycadd equ 17 ;cycle add (*8)
pic_widmod equ 46 ;animation-width modulo
pic_future equ 50 ;free future space
pic_palnum equ 62 ;aantal kleuren
pic_pal equ 64 ;palette start
pic_palsiz equ 256*4 ;vaste palette size (longwords)
pic_raw equ pic_pal+pic_palsiz ;palette start
endc
var_len equ $300 ;lengte vartabel
var__GfxBase equ $000 ;graphics lib
var_pic1 equ $004 ;current picture
var_anispd1 equ $008 ;animspeed
var_anitel1 equ $00c ;animcount
var_cprbck equ $010 ;copperback
var_bck equ $014 ;background
var_pic2 equ $018 ;current picture
var_ntsc equ $01c ;ntsc/pal frequence
var_lnd equ $020 ;landscape
var_anilop1 equ $024
var_rottrg equ $028 ;effect trigger
var_txt1 equ $040 ;text
var_txt16 equ 15*4+var_txt1
var_vec1 equ $080 ;vectors
var_vec16 equ 15*4+var_vec1
var_fon1 equ $0c0 ;fonts
var_fon16 equ 15*4+var_fon1
var_cols1 equ $100 ;colorsets
var_cols16 equ 15*4+var_cols1
var_obj1 equ $180 ;objects
var_obj16 equ 15*4+var_obj1
ifd rout
;videotracker routine-test
incdir "w:include/"
include "exec/types.i"
include "graphics/gfxbase.i"
include "lvo/graphics_lib.i"
incdir 'videotracker:effect/'
SECTION 1,CODE_C
tus
lea var,a0
; move.l #rotincobj,var_obj1(a0) ;incbinfile !!!
; move.l #rotincbck,var_bck(a0) ;incbinfile !!!
; move.l #rottube,var_vec1(a0) ;incbinfile !!!
; move.l #rotsrc,curpal1 ;palette !!!
; move.l #rotset,var_cols1(a0) ;colorset !!!
bsr paltabres
move.l #rotincpic1,curpic1 ;picture !!!
move.l #rotincpic1,curpal1 ;picture !!!
bsr grap
bsr grac
move.l #rotincpic2,curpic1 ;picture !!!
move.l #rotincpic2,curpal1 ;picture !!!
move.l #rotincpic1,curpic2 ;picture !!!
move.l #rotincpic1,curpal2 ;picture !!!
bsr grap
bsr grac
move.l ($4).w,a6
sub.l a1,a1
jsr -$126(a6) ;findtask
move.l d0,curtsk
move.l d0,a0
move.l $b8(a0),tskpri
lea dosnam,a1 ;doslib openen
moveq.l #0,d0
move.l (4).w,a6
jsr -408(a6) ;openlib
move.l d0,doslib
bsr.s label5 ;videotracker opstarten
move.l curtsk,a0
move.l tskpri,$b8(a0)
move.l ($4).w,a6
jsr -$84(a6) ;forbid
move.l doslib,a1
move.l (4).w,a6
jsr -414(a6) ;closelib
moveq.l #0,d0
rts
label5
move.l (4).w,a6 ;workbench gedoe
move.b 530(a6),ntscmode ;50/60 hertz halen
ifd ntsctest
move.b #60,ntscmode ;60 hertz (ntsc)
endc
cmp.b #50,ntscmode ;ntsc ?
beq.s str.ntsc
move.l #vew_hgt-56,hogscr ;set NTSC screen hight
str.ntsc
lea cprjmp,a2 ;copjmp zetten !
move.l #cprbck-8,d0
move.w d0,6(a2)
swap d0
move.w d0,2(a2)
lea cprbck-8,a2 ;copstr zetten !
move.l #cpr,d0
move.w d0,6(a2)
swap d0
move.w d0,2(a2)
bsr cprsprrem ;sprites legen
lea gfxnam,a1 ;graphics lib openen
move.l (4).w,a6
jsr -408(a6) ;openlib
move.l d0,a6
move.l d0,gfxlib
move.l 38(a6),oldcprlist
bset #1,$bfe001
bsr copbuf ;copper vullen
bsr sysoff
gadrun
btst #6,($bfe001).l
bne gadrun
scrend
scrend.play
bsr syson
move.l gfxlib,a1
move.l (4).w,a6
jsr -414(a6) ;closelib
scrend.qb
moveq.l #0,d0
rts
;vertical blank interrupt, no blits.
;handles counters,interlace,sprite
;level 3
intvb
bra.s intvb.cnt
dc.l 'VIDU'
dc.l 'LOOP'
intvb.cnt
movem.l d0-d7/a0-a6,-(sp)
lea ($dff000).l,a6
move.w $01e(a6),d0
btst #5,d0 ;vblank ?
bne.s intvb.vb
bra.s intcop.end
intvb.vb
bsr grap
bsr palctr ;palette zetten
bsr.s copbuf ;copper vullen
intvb.end
move.w #$0020,$09c(a6) ;vb bit wissen
movem.l (sp)+,d0-d7/a0-a6 ;multitask uit, shit !
rte
intcop.end
movem.l (sp)+,d0-d7/a0-a6
move.l intvbold,-(sp)
rts
;transmission buffer empty routine, BLIT !
;handles routines,animations
inttbe ;tbe interrupt
movem.l d0-d7/a0-a6,-(sp)
lea ($dff000).l,a6
move.w $01e(a6),d0
btst #0,d0 ;no tbe ?
beq.s intdskblk
btst #6,($bfe001).l ;muis ingedrukt ?
beq.s inttbe.cop
btst #2,($dff016).l
beq.s inttbe.cop
ifd debug
move.w #$700,$dff180
endc
bsr rotply ;routineplayer BLIT !
bsr.s copbuf ;copper vullen
ifd debug
move.w #$070,$dff180
endc
inttbe.cop
inttbe.end
move.w #$0001,$09c(a6)
movem.l (sp)+,d0-d7/a0-a6
rte
intdskblk
move.w #$0001,$09c(a6) ;be sure for no tbe handling
movem.l (sp)+,d0-d7/a0-a6
move.l inttbeold,-(sp)
rts
;moves the copperbuffer to the copperlist
;sort of double buffering
copbuf
movem.l d0-d7/a0-a6,-(sp)
lea ($dff000).l,a6
copbuf.novb ;copperchange overslaan
moveq.l #0,d0
move.b $005(a6),d0
lsl.w #8,d0
moveq.l #0,d1
move.b $006(a6),d1
add.w d1,d0
cmp.w #$4,d0 ;lower limit, all stations 100%
blt copbuf.novb
cmp.b #50,ntscmode
beq.s copbuf.pal
cmp.w #$133-72-8,d0 ;ntsc grens
bge copbuf.novb
bra.s copbuf.cont
copbuf.pal
cmp.w #$133-8,d0 ;pal grens
bge copbuf.novb
copbuf.cont
lea gra.s,a0 ;buffer copieren
lea cprbuf,a1
copbuf_aga ;AGA stuff :)
move.l #(gra.ql)/4-1,d0
copbuf.a
move.w 2(a0),2(a1)
add.l #4,a0
add.l #4,a1
dbra d0,copbuf.a
copbuf.end
movem.l (sp)+,d0-d7/a0-a6
rts
;goes back to the workbench
syson
movem.l d0-d7/a0-a6,-(sp)
move.w #$0001,$dff09a ;tbeint uit
move.l intvbold,($6c).w
move.l inttbeold,($64).w
move.l 4,a6
jsr -138(a6) ;permit
move.l gfxlib,a6
jsr -462(a6) ;disownblitter
move.l wbview,a1
move.l gfxlib,a6
jsr _LVOLoadView(a6) ; Fix view
jsr _LVOWaitTOF(a6)
jsr _LVOWaitTOF(a6) ; wait for LoadView()
syson.ras
cmp.b #$c0,$dff006 ;prevent copperjump
bne syson.ras
move.l gfxlib,a6
move.l gb_copinit(a6),$dff080 ; Kick it into life
movem.l (sp)+,d0-d7/a0-a6
rts
;goes back to the gadgetscreen
sysoff
movem.l d0-d7/a0-a6,-(sp)
move.l gfxlib,a6
move.l gb_ActiView(a6),wbview ;current view
sub.l a1,a1 ; clear a1
jsr _LVOLoadView(a6) ; Flush View to nothing
jsr _LVOWaitTOF(a6) ; Wait once
jsr _LVOWaitTOF(a6) ; Wait again.
move.l gfxlib,a6
jsr -456(a6) ;ownblitter
move.l 4,a6
jsr -132(a6) ;forbid
move.l ($6c).w,intvbold
move.l #intvb,($6c).w
move.l ($64).w,inttbeold
move.l #inttbe,($64).w
move.w #$8001,$dff09a ;tbeint aan
bsr gracpr ;reset copper
bsr copbuf ;copy copper
move.l #cpr,$dff080
movem.l (sp)+,d0-d7/a0-a6
rts
cprsprrem
movem.l d0-d7/a0-a6,-(sp)
lea cprspr,a0
move.l #sprdat,d0
move.w #7,d1
cprsprrem.a
move.w d0,3*2(a0)
swap d0
move.w d0,1*2(a0)
swap d0
add.l #8,a0
dbra d1,cprsprrem.a
movem.l (sp)+,d0-d7/a0-a6
rts
varset ;variablen neerzetten
movem.l d0-d7/a0-a6,-(sp)
move.l #var,a0
move.l #cprbck,var_cprbck(a0)
move.l gfxlib,var__GfxBase(a0)
move.b ntscmode,var_ntsc(a0)
move.l curpic1,var_pic1(a0) ;variabel
move.l curpic2,var_pic2(a0) ;variabel
move.w anispd1,var_anispd1(a0)
move.w anitel1,var_anitel1(a0)
move.b anilop1,var_anilop1(a0)
move.l #rottrg,var_rottrg(a0)
movem.l (sp)+,d0-d7/a0-a6
rts
;this routine handles all videotracker-routines
rotply
movem.l d0-d7/a0-a6,-(sp)
moveq.l #0,d0
lea currot1,a2 ;routine 1
move.w rotinf1,d0 ;routine info
bsr.s rotplyr
rotply.end
movem.l (sp)+,d0-d7/a0-a6
rts
;this routine handles 1 routine, BLIT !
rotplyr
movem.l d0-d7/a1-a6,-(sp)
move.l #rot,(a2) ;routinestart address !!!
; move.b #50,ntscmode ;ntsc/pal hz
; clr.l curpic2 ;background picture
move.w #1,anispd1 ;animationspeed
clr.w anitel1 ;animation position
lea var,a0 ;communication-table
; move.l #rotst2,var_cols1(a0) ;colorset !!!
; move.l #rotst1,var_cols1+4(a0) ;colorset !!!
; move.l #rotincpic2,curpic1 ;picture !!!
; move.l #rotincpic2,curpal1 ;picture !!!
; move.b #0,anilop1 ;animloop off/on !!!
; move.w #32,anispd1 ;animdelay !!!
move.l #routinemode,d0 ;routinemode !!!
sub.l a0,a0 ;picture info legen
tst.l (a2) ;is er een routine ?
beq rotplyr.end ;interlace handling
move.l intdel,d2 ;delay
move.l inttel,d1 ;teller
cmp.w d2,d1
blt rotplyr.end
clr.l inttel
bsr varset ;variabelen updaten
move.l (a2),a1 ;routine halen
move.l #var,a0 ;variablen tabel
movem.l d3-d7/a1-a6,-(sp)
moveq.l #0,d1 ;vars wissen
moveq.l #0,d2
moveq.l #0,d3
moveq.l #0,d4
moveq.l #0,d5
moveq.l #0,d6
moveq.l #0,d7
sub.l a2,a2
sub.l a3,a3
sub.l a4,a4
sub.l a5,a5
jsr 4(a1) ;routine afwerken
movem.l (sp)+,d3-d7/a1-a6
;Routine:
;
;Input:
;a0=variabelentabel
;d0=routinemode
;
;Output:
;a0=picture
;d1=copperlist
;d2=interruptdelay
move.w #$0020,$dff09a ;vb off !
move.l d2,intdel ;delay
lea cprjmp,a3
move.l #cprbck-8,d0
cmp.l (a2),a1 ;routine ondertussen gewipt ?
bne.s rotplyr.nocop
tst.l d1 ;copperlist ?
beq.s rotplyr.nocop
move.l d1,d0
rotplyr.nocop
move.w d0,6(a3)
swap d0
move.w d0,2(a3)
cmp.l #currot2,a2 ;dpl rot ?
bne.s rotplyr.rot1
cmp.l #0,a0 ;geen picture ?
beq rotplyr.endvb
cmp.l (a2),a1 ;routine ondertussen gewipt ?
bne rotplyr.endvb
move.l a0,curpal2
cmp.l #'PALE',(a0) ;palette ?
beq rotplyr.pal
move.l a0,curpic2
clr.l curpic2+4 ;animatie data wissen
bra rotplyr.alla
rotplyr.rot1
cmp.l #0,a0 ;picture ?
beq rotplyr.alla
cmp.l #'PALE',(a0)
beq rotplyr.qb
tst.b rotdpl ;routine gestart ?
beq.s rotplyr.qb
; bsr dpl
move.l oldrot,currot2 ;was al gezet
rotplyr.qb
cmp.l (a2),a1 ;routine ondertussen gewipt ?
beq.s rotplyr.nochange
move.l a0,curpal2 ;current palette
cmp.l #'PALE',(a0) ;palette ?
beq rotplyr.pal
move.l a0,curpic2 ;current picture (cycle)
clr.l curpic2+4 ;animatie data wissen
bra rotplyr.alla
rotplyr.nochange
move.l a0,curpal1 ;current palette
cmp.l #'PALE',(a0) ;palette ?
bne rotplyr.nopal
clr.l curpal2
rotplyr.pal
clr.b rotdpl
clr.b dplctr
bsr grac ;colorset
bra rotplyr.endvb
rotplyr.nopal
move.l a0,curpic1 ;current picture (cycle)
clr.l curpic1+4 ;animatie data wissen
rotplyr.rotnopic
tst.b rotdpl
beq.s rotplyr.alla
clr.b rotdpl
clr.l cycdel1 ;cycle info wissen
clr.l 4+cycdel1
bsr paltabres ;reset colorcycle tabel
clr.l curfrm1 ;curfrm1, altijd planes zetten
clr.w anitel1 ;anitel1 op begin
move.b #1,dplctr ;dual playfield
bsr grap
bsr grac ;colorset
bra.s rotplyr.endvb
rotplyr.alla
clr.b dplctr
bsr grap ;plnset (double buffer)
rotplyr.endvb
move.w #$8020,$dff09a
rotplyr.end
movem.l (sp)+,d0-d7/a1-a6
rts
;removes possible routine-coppers
gracpr
movem.l d0-d7/a0-a6,-(sp)
lea cprjmp,a3
move.l #cprbck-8,d0 ;copperlist resetten
move.w d0,6(a3)
swap d0
move.w d0,2(a3)
movem.l (sp)+,d0-d7/a0-a6
rts
grap ;d7=anim
movem.l d0-d7/a0-a6,-(sp)
clr.l d7
tst.l curpic1 ;current picture ?
beq grap.end
move.l curpic1,a2 ;normal pic halen
lea gracprscr,a1 ;window neerzetten
move.l hogscr,d1
move.w pic_hgt(a2),d3 ;pic hoogte
move.w pic_vew(a2),d5
btst #2,d5 ;interlace ?
beq.s grap.nohi4
lsr.w #1,d3 ;/2
grap.nohi4
cmp.w d3,d1
bge.s grap.hog
move.w d1,d3
grap.hog
sub.w d3,d1
lsr.w #1,d1
add.w #win_str,d1
move.w d1,d2
add.w d3,d2
move.b d1,2(a1) ;y start
move.b d2,6(a1) ;y end
move.w pic_wid(a2),d4 ;pic breedte in bytes
lsl.l #3,d4
move.l #vew_wid*8,d0
move.l #0,d1
move.l #$61,d6
cmp.w #40,pic_wid(a2) ;overscan ?
ble.s grap.noov1
move.l #$41,d6
grap.noov1
move.w pic_vew(a2),d5
btst #15,d5 ;hires ?
beq.s grap.nohi2
move.l #(vew_wid)*8*2,d0
move.l #1,d1
move.l #$61,d6
cmp.w #80,pic_wid(a2) ;overscan ?
ble.s grap.nohi2
move.l #(vew_wid)*8*2,d0
move.l #$51,d6
bra.s grap.noshi2
grap.nohi2
btst #6,d5 ;super hires ?
beq.s grap.noshi2
move.l #(vew_wid)*8*4,d0
move.l #2,d1
move.l #$61,d6
cmp.w #80*2,pic_wid(a2) ;overscan ?
ble.s grap.noshi2
move.l #(vew_wid)*8*4,d0
move.l #$51,d6
grap.noshi2
clr.w d5
cmp.w d0,d4 ;breeder dan scherm ?
ble.s grap.c
move.w d4,d5
move.w d0,d4
sub.w d0,d5 ;modulo
lsr.w #3,d5 ;/8
grap.c
lsr.w d1,d0
lsr.w d1,d4
move.w d0,d2
sub.w d4,d2
lsr.w #1,d2 ;/2
add.w d6,d2
move.b d2,3(a1) ;x start
move.w d2,d3 ;d3 bewaren !
add.w d4,d2 ;d4 bewaren !
move.b d2,7(a1) ;x end
move.w pic_vew(a2),d6
btst #15,d6 ;hires ?
beq.s grap.nohi5
add.l d4,d4 ;*2
bra.s grap.noshi5
grap.nohi5
btst #6,d6 ;super hires ?
beq.s grap.noshi5
add.l d4,d4 ;*4
add.l d4,d4
grap.noshi5
move.l d7,-(sp)
move.w pic_vew(a2),d6
move.l #17,d0
move.l #4,d1 ;ecs 1
move.l #3,d7
btst #15,d6 ;hires ?
beq.s grap.nohi3
move.l #17,d0 ;ecs 9
move.l #4,d1 ;ecs 2
move.l #2,d7
bra.s grap.noshi3
grap.nohi3
btst #6,d6 ;super hires ?
beq.s grap.noshi3
move.l #17,d0 ;ecs 9
move.l #4,d1 ;ecs 2
move.l #1,d7
grap.noshi3
sub.w d0,d3
lsr.w #1,d3
move.w d3,10(a1) ;ddfstrt
move.w d4,d2 ;pic breedte in pixels
lsr.w #4,d2 ;/16
sub.w d1,d2 ;-1
lsl.w d7,d2 ;*8
add.w d2,d3
move.w d3,14(a1) ;ddfstop
move.l (sp)+,d7
lea pic_raw(a2),a0
moveq.l #0,d2
move.w pic_dpt(a2),d2
sub.l #1,d2
muls pic_wid(a2),d2
add.w d2,d5
move.w pic_vew(a2),d2 ;viewmode add
btst #2,d2
beq.s grap.nolace4
moveq.l #0,d2
move.w pic_dpt(a2),d2
muls pic_wid(a2),d2
add.w d2,d5 ;interlace gedoe
grap.nolace4
lea gracprbpl,a4 ;iffpln neerzetten
lea gracprpln,a0 ;iffpln neerzetten
moveq.l #0,d2
move.w pic_dpt(a2),d2 ;plnnummer 1 halen
move.l #8,d6 ;copper step !
tst.l curpic2 ;2de picture ?
bne.s grap.pic2
grap.nopic2
move.w d5,34(a1) ;modulo oneven zetten
bra grap.nodpl
grap.pic2
move.l curpic2,a3 ;oneven plane
move.l curpic2+4,a6 ;oneven plane
move.l currot2,a5 ;oneven plane
clr.l curpic2 ;mischien niet goed
clr.l curpic2+4 ;mischien niet goed
clr.l curpal2 ;mischien niet goed
clr.l currot2 ;mischien niet goed
cmp.l curpic1,a3 ;picture hetzelfde ?
beq.s grap.nopic2
cmp.l #0,currot1 ;routine ?
beq.s grap.norot
cmp.l currot1,a5 ;routine hetzelfde ?
beq.s grap.nopic2
grap.norot
cmp.b #4,d2 ;> 16 kleuren ? (AGA)
bgt grap.nopic2
move.w pic_dpt(a3),d3 ;plnnummer 2 halen
cmp.b d2,d3 ;gelijke plnummers ?
bne.s grap.nopic2
move.w pic_vew(a2),d1
cmp.w pic_vew(a3),d1 ;view gelijk ?
bne.s grap.nopic2
move.w pic_vew(a2),d1 ;groter dan view test
btst #6,d1 ;super hires ?
beq.s grap.nohi2a
move.l #vew_wid*4,d1
bra.s grap.nohi2b
grap.nohi2a
btst #15,d1 ;hires ?
beq.s grap.noshi2a
move.l #vew_wid*2,d1
bra.s grap.nohi2b
grap.noshi2a
move.l #vew_wid,d1
grap.nohi2b
cmp.w pic_wid(a2),d1 ;breder dan view ?
bgt.s grap.small
cmp.w pic_wid(a3),d1 ;breder dan view ?
bgt.s grap.small
move.w pic_vew(a2),d1
btst #2,d1
beq.s grap.nolace8a
move.l hogscr,d1
add.l d1,d1
bra.s grap.nolace8b
grap.nolace8a
move.l hogscr,d1
grap.nolace8b
cmp.w pic_hgt(a2),d1 ;hoger dan view ?
bgt.s grap.small
cmp.w pic_hgt(a3),d1 ;hoger dan view ?
bgt.s grap.small
bra.s grap.big
grap.small
move.w pic_hgt(a2),d1 ;wid+hgt<vew
cmp.w pic_hgt(a3),d1 ;hoogte gelijk ?
bne grap.nopic2
move.w pic_wid(a2),d1
cmp.w pic_wid(a3),d1 ;breedte gelijk ?
bne grap.nopic2
grap.big
move.l a3,curpic2 ;toch wel goed !
move.l a6,curpic2+4
move.l a3,curpal2
move.l a5,currot2
tst.b dplctr ;dual playfield al gezet ?
beq grap.nocop
move.w 30(a1),34(a1) ;modulo copieren
move.w 2(a4),d1 ;bplcon0
btst #10,d1 ;al dual playfield ?
beq.s grap.ta
move.w 2(a0),10(a0) ;plane 0>1 copieren
move.w 6(a0),14(a0)
move.w 18(a0),26(a0) ;plane 2>3 copieren
move.w 22(a0),30(a0)
move.w 34(a0),42(a0) ;plane 4>5 copieren
move.w 38(a0),46(a0)
move.w 50(a0),58(a0) ;plane 6>7 copieren
move.w 54(a0),62(a0)
bra.s grap.tb
grap.ta
move.w 24(a0),58(a0) ;plane 3>7 copieren
move.w 28(a0),62(a0)
move.w 18(a0),42(a0) ;plane 2>5 copieren
move.w 22(a0),46(a0)
move.w 10(a0),26(a0) ;plane 1>3 copieren
move.w 14(a0),30(a0)
move.w 2(a0),10(a0) ;plane 0>1 copieren
move.w 6(a0),14(a0)
grap.tb
move.l #palette,a3 ;palette copieren
move.w #16-1,d1
grap.pal
move.l (a3)+,60(a3)
dbra d1,grap.pal
grap.nocop
add.w d3,d2 ;aantal bitplanes
cmp.w #8,d2 ;8 bitplanes ?
blt grap.no8planes2
move.w #%10000,d2 ;only bit 4
bra grap.8planes2
grap.no8planes2
lsl.w #8,d2
lsl.w #4,d2
grap.8planes2
or.w #$400,d2 ;dual playfield aan
move.w d2,2(a4) ;bplcon0
movem.l d0-d7/a0-a6,-(sp)
move.l curpic,a2 ;animpic ?
move.l curfrm,d7
cmp.l #0,a2
bne.s grap.noanipic
move.l curpic2,a2 ;normal pic ?
move.l curfrm2,d7
cmp.l #0,a2
beq.s grap.nodplpic
grap.noanipic
add.l d6,a0
add.w d6,d6
bsr.s grappln ;a2,d6,d7,d0
grap.nodplpic
movem.l (sp)+,d0-d7/a0-a6
add.w d6,d6
bra.s grap.nodpla
grap.nodpl ;geen dual playfield
cmp.w #8,d2 ;8 bitplanes ?
blt grap.no8planes
move.w #%10000,d2 ;only bit 4
bra grap.8planes
grap.no8planes
lsl.w #8,d2
lsl.w #4,d2
grap.8planes
move.w d2,2(a4) ;bplcon0
grap.nodpla
move.w d5,30(a1) ;modulo even
moveq.l #0,d3
add.w pic_vew(a2),d3 ;viewmode add
moveq.l #0,d2
move.w 2(a4),d2
or.l d3,d2
ifd gui
tst.b genlck
bne grap.genset
endc
or.l #$100,d2 ;genlock off ($302)
ifd gui
bra grap.gencont
grap.genset
or.l #$102,d2 ;genlock on ($302)
grap.gencont
endc
move.w d2,2(a4)
bsr.s grappln ;a2,d6,d7,d0
grap.end
movem.l (sp)+,d0-d7/a0-a6
rts
;sets on of the 2 possible pictures to the copper
;handles interlace
;d7=framenummer
;d6=copperliststap
;d0=raw planes positie
;a2=current picture
grappln ;planes invullen
movem.l d0-d7/a0-a6,-(sp)
lea pic_raw(a2),a1
move.l a1,d0 ;raw planes
moveq.l #0,d2 ;x*y
move.w pic_wid(a2),d2
lsr.l #1,d2 ;/2
moveq.l #0,d3
move.w pic_hgt(a2),d3
muls d3,d2
move.l d2,d4
add.l d2,d2
move.w pic_dpt(a2),d3
muls d3,d4 ;hele picture size
muls d7,d4 ;frame*size d7 !!!
add.l d4,d4
add.l d4,d0
move.l #vew_wid,d5 ;max x view
move.l hogscr,d4 ;max y view
move.w pic_vew(a2),d1 ;viewmode add
btst #2,d1
beq.s grappln.nolace
add.l d4,d4 ;max y view
grappln.nolace
btst #15,d1 ;hires ?
beq.s grappln.nohi
move.l #vew_wid*2,d5 ;max x view
bra.s grappln.noshi
grappln.nohi
btst #6,d1 ;super hires ?
beq.s grappln.noshi
move.l #vew_wid*4,d5 ;max x view
grappln.noshi
moveq.l #0,d3 ;scherm centreren
move.w pic_wid(a2),d3 ;pic breedte in bytes
cmp.w d5,d3 ;breder dan scherm ?
ble.s grappln.qa
sub.w d5,d3 ;-scherm breedte
lsr.w #2,d3 ;/4
add.l d3,d3
add.l d3,d0
grappln.qa
move.w pic_hgt(a2),d3 ;pic hoogte in bytes
cmp.w d4,d3 ;hoger dan scherm ?
ble.s grappln.qb
sub.w d4,d3 ;-scherm breedte
lsr.w #1,d3 ;/2
moveq.l #0,d5
move.w pic_wid(a2),d5 ;pic breedte in bytes
muls pic_dpt(a2),d5
muls d5,d3
add.l d3,d0
grappln.qb
moveq.l #0,d2
move.w pic_wid(a2),d2
move.w pic_vew(a2),d5 ;interlace flipping ?
btst #2,d5
beq.s grappln.nolac7b
move.w $04(a6),d5 ;even/oneven ?
btst #15,d5
beq.s grappln.nolac7b
moveq.l #0,d3
move.w pic_wid(a2),d3
muls pic_dpt(a2),d3
add.l d3,d0
grappln.nolac7b
move.w pic_dpt(a2),d1 ;plnnummer 1 halen
tst.w d1 ;0 planes ?
beq grappln.end
sub.w #1,d1
grappln.a
move.w d0,3*2(a0)
swap d0
move.w d0,1*2(a0)
swap d0
add.l d6,a0 ;d6=copper step !
add.l d2,d0
dbra d1,grappln.a
cmp.w #8,pic_dpt(a2) ;8 planes ?
bne grappln.noham8
btst #3,pic_vew(a2) ;ham ?
beq grappln.noham8
move.w -14(a0),d0 ;get 6
move.w -10(a0),d1
move.w -6(a0),d2 ;get 7
move.w -2(a0),d3
move.w -18(a0),-2(a0) ;5>7
move.w -22(a0),-6(a0) ;5>7
move.w -26(a0),-10(a0) ;4>6
move.w -30(a0),-14(a0) ;4>6
move.w -34(a0),-18(a0) ;3>5
move.w -38(a0),-22(a0) ;3>5
move.w -42(a0),-26(a0) ;2>4
move.w -46(a0),-30(a0) ;2>4
move.w -50(a0),-34(a0) ;1>3
move.w -54(a0),-38(a0) ;1>3
move.w -58(a0),-42(a0) ;0>2
move.w -62(a0),-46(a0) ;0>2
move.w d0,-62(a0) ;6>0
move.w d1,-58(a0) ;6>0
move.w d2,-54(a0) ;7>1
move.w d3,-50(a0) ;7>1
grappln.noham8
grappln.end
movem.l (sp)+,d0-d7/a0-a6
rts
;sets palettes to palette-buffer
grac
movem.l d0-d7/a0-a6,-(sp)
lea curpal1,a3 ;palette 1
move.l #palette,a1
bsr.s gracfrm
lea curpal2,a3 ;palette 2 (dpl)
move.l #16*4+palette,a1
bsr.s gracfrm
bsr palctr ;palette-buffer to copper
grac.end
movem.l (sp)+,d0-d7/a0-a6
rts
;moves palette from picture to palette-buffer
gracfrm
movem.l d0-d7/a0-a6,-(sp)
tst.l (a3) ;palette aanwezig ?
beq.s gracfrm.end
move.l (a3),a2 ;current palette
cmp.l #'PALE',(a2) ;palette ?
bne.s gracfrm.pict
lea 6(a2),a0 ;palette
move.w 4(a2),d0 ;aantal kleuren
bra.s gracfrm.col
gracfrm.pict
cmp.l #'ANIM',(a2) ;animatie ?
bne.s gracfrm.noanim
moveq.l #0,d1
move.w pic_ani(a2),d1
bclr #7,d1 ;behandelbit weghalen
moveq.l #0,d3
move.w pic_wid(a2),d3
lsr.w #1,d3 ;/2
muls pic_hgt(a2),d3
muls pic_dpt(a2),d3
add.l d3,d3
add.l #pic_raw,d3
move.l d3,d5
btst #0,d1
bne.s gracfrm.buf2
moveq.l #0,d5
gracfrm.buf2
add.l d5,a2
gracfrm.noanim
lea pic_pal(a2),a0 ;palette
move.w pic_palnum(a2),d0
tst.w d0 ;0 planes ?
beq.s gracfrm.end
gracfrm.col
gracfrm.fa
move.l (a0)+,(a1)+
dbra d0,gracfrm.fa
gracfrm.end
movem.l (sp)+,d0-d7/a0-a6
rts
;handles colorcycling in the palette-buffer
palcycctr
movem.l d0-d7/a0-a6,-(sp)
move.l curpic1,a2 ;current raw
cmp.l #0,a2
beq.s palcycctr.qb
lea cycdel1,a3 ;cycle delays
move.l #paltab,a4
bsr palcyc
palcycctr.qb
move.l curpic2,a2 ;current raw
cmp.l #0,a2
beq.s palcycctr.c
lea cycdel2,a3 ;cycle delays
move.l #16*2+paltab,a4
bsr palcyc
palcycctr.c
movem.l (sp)+,d0-d7/a0-a6
rts
;copies palette-buffer to copper
palctr
movem.l d0-d7/a0-a6,-(sp)
lea gracprcol,a1 ;AGA
move.l #palette,a0
move.l #paltab,a2
move.w #8-1,d6
palctr.e
move.w #32-1,d7
palctr.d
move.w (a2)+,d0 ;get cycle-position
move.w (a0,d0),6(a1) ;high RGB bits
move.w 2(a0,d0),((32+1)*4)+6(a1) ;low RGB bits
add.l #4,a1
dbra d7,palctr.d
add.l #((32+2)*4),a1
dbra d6,palctr.e
palctr.end
movem.l (sp)+,d0-d7/a0-a6
rts
;reset palette tabel, for proper color cycling
paltabres
movem.l d0-d7/a0-a6,-(sp)
lea paltab,a0
clr.l d0
move.w #256-1,d1
paltabres.a
move.w d0,(a0)+
add.w #4,d0 ;aga color words, high RGB + low RGB
dbra d1,paltabres.a
paltabres.end
movem.l (sp)+,d0-d7/a0-a6
rts
;colorcyclinghandling of a palette
palcyc
movem.l d0-d7/a0-a6,-(sp)
move.w #4-1,d7 ;4 cycles
palcyc.d
tst.w (a3)+ ;delay klaar ?
bne.s palcyc.c
moveq.l #0,d1
move.b pic_cycstr(a2),d1 ;start color
lsl.b #1,d1 ;*2
moveq.l #0,d2
move.b pic_cycend(a2),d2 ;end color
lsl.b #1,d2 ;*2
moveq.l #0,d3
move.b pic_cycadd(a2),d3 ;richting
move.l a4,a0 ;palette pointer
move.l a0,a1
add.l d1,a0 ;startcolor
add.l d2,a1 ;endcolor
cmp.b #1,d3 ;omhoog
beq.s palcyc.up
cmp.b #3,d3 ;omlaag
beq.s palcyc.down
bra.s palcyc.i
palcyc.up ;kleuren copieren
move.w (a1),d4 ;laatst color bewaren
palcyc.f ;kleuren copieren
cmp.l a0,a1
beq.s palcyc.fa
move.w -(a1),2(a1)
bra.s palcyc.f
palcyc.fa
move.w d4,(a1)
bra.s palcyc.g
palcyc.down
move.w (a0),d4 ;laatst color bewaren
palcyc.h ;kleuren copieren
cmp.l a0,a1
beq.s palcyc.ha
move.w 2(a0),(a0)+
bra.s palcyc.h
palcyc.ha
move.w d4,(a1)
palcyc.g
move.b pic_cycspd(a2),-1(a3) ;delay zetten
bra.s palcyc.i
palcyc.c
sub.w #1,-2(a3) ;cycle delay aftellen
palcyc.i
add.l #4,a2 ;next cycle info
dbra d7,palcyc.d
palcyc.qb
movem.l (sp)+,d0-d7/a0-a6
rts
; SECTION variabelen,DATA_c
cnop 0,2
curtsk dc.l 0
tskpri dc.l 0
duplok dc.l 0
inttel dc.l 0
intdel dc.l 0
form dc.l 0
ifffil dc.l 0
intvbold dc.l 0
inttbeold dc.l 0
patpos dc.l 0
gfxlib dc.l 0
doslib dc.l 0
wbview dc.l 0
mt_data dc.l 0
memvid dc.l 0
oldcprlist dc.l 0
hogscr dc.l vew_hgt
inspos dc.l -1
anispd1 dc.w 1 ;nooit op 0 !
anispd2 dc.w 1
cnop 0,2
varclr.s ;start wissen
oldrot dc.l 0
curpic dc.l 0
curfrm dc.l 0
cycdel1 ds.w 4
cycdel2 ds.w 4
rotinf1 dc.w 0
rotinf2 dc.w 0
effspd dc.w 0
efflop dc.b 0
anilop1 dc.b 0
anilop2 dc.b 0
anipal1 dc.b 0
anipal2 dc.b 0
rotdpl dc.b 1
rottrg dc.b 1
dplctr dc.b 0
cnop 0,2
insdat ds.l 4
inspri dc.l 0
instel dc.w 0
cureff dc.l 0
efftel dc.w 0
curpal1 dc.l 0
curpal2 dc.l 0
currot1 dc.l 0
currot2 dc.l 0
curpic1 dc.l 0
curpic2 dc.l 0
anitel1 dc.w 0
anitel2 dc.w 0
curfrm1 dc.l 0
curfrm2 dc.l 0
oldfrm1 dc.l 0
oldfrm2 dc.l 0
varclr.e
dc.l 0 ;wisruimte
varclr.ql equ varclr.e-varclr.s ;wislengte
ntscmode dc.b 0
end dc.b 0
pronam dc.b 'VideoTracker',0
cnop 0,2
dosnam dc.b 'dos.library',0
cnop 0,4
gfxnam dc.b 'graphics.library',0
cnop 0,4
cnop 0,4
gra.s ;copperlist edit buffer
gracprscr
dc.w $8e,$3381,$90,$81c1,$92,$003c,$94,$00d0
gracprbpl
dc.w $100,$0000,$102,$0000,$104,$0020
dc.w $108,$0000,$10a,$0000,$1fc,$0003
gracprpln
dc.w $e0,$0000,$e2,$0000 ;1
dc.w $e4,$0000,$e6,$0000 ;2
dc.w $e8,$0000,$ea,$0000 ;3
dc.w $ec,$0000,$ee,$0000 ;4
dc.w $f0,$0000,$f2,$0000 ;5
dc.w $f4,$0000,$f6,$0000 ;6
dc.w $f8,$0000,$fa,$0000 ;7
dc.w $fc,$0000,$fe,$0000 ;8
gracprcol
dc.w $106,$0000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$0200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$2000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$2200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$4000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$4200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$6000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$6200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$8000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$8200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$a000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$a200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$c000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$c200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$e000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$e200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$1000
cprjmp
dc.w $080,0,$082,0
gra.e
gra.ql equ gra.e-gra.s ;block lengte
cpr ;real copperlist
dc.w $0001,$fffe
dc.w $09c,$8001 ;tbeint
cprspr
dc.w $120,$0000,$122,$0000
dc.w $124,$0000,$126,$0000
dc.w $128,$0000,$12a,$0000
dc.w $12c,$0000,$12e,$0000
dc.w $130,$0000,$132,$0000
dc.w $134,$0000,$136,$0000
dc.w $138,$0000,$13a,$0000
dc.w $13c,$0000,$13e,$0000
cprbuf
dc.w $8e,$3381,$90,$81c1,$92,$003c,$94,$00d0
dc.w $100,$9000,$102,$0000,$104,$0020
dc.w $108,$0000,$10a,$0000,$1fc,$0003
dc.w $e0,$0000,$e2,$0000 ;0
dc.w $e4,$0000,$e6,$0000 ;1
dc.w $e8,$0000,$ea,$0000 ;2
dc.w $ec,$0000,$ee,$0000 ;3
dc.w $f0,$0000,$f2,$0000 ;4
dc.w $f4,$0000,$f6,$0000 ;5
dc.w $f8,$0000,$fa,$0000 ;6
dc.w $fc,$0000,$fe,$0000 ;7
dc.w $106,$0000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$0200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$2000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$2200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$4000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$4200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$6000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$6200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$8000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$8200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$a000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$a200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$c000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$c200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$e000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$e200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$1000
dc.w $080,0,$082,0
cprbuf.e
dc.w $088,$0000 ;copjmp2
dc.w $080,0,$082,0 ;moet achter cprbck blijven !
cprbck
sprdat
dc.w $ffff,$fffe
palette ds.l 256 ;palette 24-bits, far out !
paltab ds.w 256 ;palette cycle-tabel
cnop 0,2
var ds.b $300 ;variabelen voor routines
; SECTION 10,CODE_C
endc
; this is the routine-source
;**********************************************************************
; Input:
; a0=variabelen tabel
; d0=routinfo
; Output:
; a0=picture
; d1=copperlist
SECTION 3,CODE
cnop 0,8
rot
rotp
ifd ocs
dc.l 'ROTO'
endc
ifnd ocs
dc.l 'ROTA'
endc
movem.l d2-d7/a1-a6,-(sp)
lea ($dff000).l,a6 ;hardware
lea rot,a5 ;prog base
ifd rout
move.l #rotc,a2
endc
move.l a2,rotchp-rot(a5)
move.l d0,d1
divs #256,d1
and.l #$ffff,d1
move.l d1,d2 ;fadespeed
muls #256,d1
sub.l d1,d0
move.l d0,d1
divs #16,d1
and.l #$ffff,d1
move.l d1,rotshp2-rot(a5) ;sinusshape pic 2
muls #16,d1
sub.l d1,d0
move.l d0,rotshp1-rot(a5) ;sinusshape pic 1
move.l var_cprbck(a0),a2
move.l a2,d1
sub.l #8,d1
move.l rotchp-rot(a5),a1
add.l #rotcop.1-rotc,a1 ;copperjump adres zetten
add.l rotbuf-rot(a5),a1
move.w d1,6(a1)
swap d1
move.w d1,2(a1)
bsr rotset
move.l d2,d0 ;fadespeed
bsr rotlop
lea rotpal1,a0 ;palette 1
move.l rotbuf2-rot(a5),d1 ;double buffering
; add.l d1,a0
; eor.l #rotpal2-rotpal1,rotbuf2-rot(a5) ;double buffering
; sub.l a0,a0
move.l rotchp-rot(a5),a1
add.l #rotcop.1-rotc,a1 ;copperlist
add.l rotbuf-rot(a5),a1
eor.l #rotcop.2-rotcop.1,rotbuf-rot(a5)
move.l a1,d1
; clr.l d1
movem.l (sp)+,d2-d7/a1-a6
rts
rotset
movem.l d0-d7/a0-a6,-(sp)
tst.l var_pic1(a0) ;is there a picture ?
beq rotset.end
clr.l d2 ;$102 bitshift
move.l var_pic1(a0),a1 ;get picture
lea pic_raw(a1),a3 ;start picture planes
move.l a3,d1
move.l d1,d5 ;plane1 naar plane2 copieren
clr.l d3
move.w pic_wid(a1),d3 ;skip voor plane1
move.l rotshp1-rot(a5),d0 ;shape number
muls #4*4,d0
lea rotshptab,a2 ;sinus shape table
lea (a2,d0),a2
bsr rotget ;a1,a2,d1=d2,d1
exg.l d1,d5 ;store pic1, get frsh pic1
ror.l #4,d2 ;store bitshift
move.l rotshp2-rot(a5),d0 ;shape number
muls #4*4,d0
lea 4*4*16+rotshptab,a2 ;sinus shape table
lea (a2,d0),a2
tst.l var_pic2(a0) ;is there double playfield ?
bne rotset.dpl
add.l d3,d1 ;get plane2 from pic1
lsl.l #1,d3 ;*2 double skip
move.l d3,d4 ;planeskip copieren
bsr rotget ;a1,a2,d1=d2,d1
bra rotset.pln
rotset.dpl
move.l var_pic2(a0),a1 ;pic halen
lea pic_raw(a1),a3
move.l a3,d1 ;raw planes halen
clr.l d4 ;skip halen
move.w pic_wid(a1),d4
bsr rotget ;a1,a2,d1=d2,d1
rotset.pln
rol.l #4,d2 ;get complete bitshift
move.l rotchp-rot(a5),a3
add.l #rotcop.1-rotc,a3
add.l rotbuf-rot(a5),a3
move.w d2,$0a(a3)
ifd ocs
move.w #3-1,d0
endc
ifnd ocs
move.w #4-1,d0
endc
rotset.a
move.w d5,$12(a3)
swap d5
move.w d5,$0e(a3)
swap d5
move.w d1,$1a(a3)
swap d1
move.w d1,$16(a3)
swap d1
add.l #16,a3
add.l d3,d5
add.l d4,d1
dbra d0,rotset.a
bra rotset.end
rotset.end
movem.l (sp)+,d0-d7/a0-a6
rts
;a1 picture
;d1 rawplanes
;a2 sinusinfo
rotget
movem.l d3-d7/a0-a6,-(sp)
lea rotsin,a3
move.l (a2),d0 ;get current x-pos
clr.l d3
move.w (a3,d0),d3 ;get sinus value
clr.l d4
move.w pic_wid(a1),d4 ;pic width in bytes
lsl.l #3,d4 ;*8
move.l #vew_wid*8,d7
btst #15-8,pic_vew(a1)
beq rotget.bc
move.l #vew_wid*8*2,d7
rotget.bc
cmp.w d7,d4 ;smaller than view ?
ble rotget.ci3
sub.l d7,d4 ;-vewwidth
cmp.w #0,d4 ;<0 ?
bge rotget.ba
clr.l d4
rotget.ba
muls d4,d3
ifd ocs
lsr.l #8,d3 ;/1024
lsr.l #2,d3
divs #16,d3
swap d3
move.w #$f,d4
sub.w d3,d4
or.w d4,d2 ;bitshift $102
endc
ifnd ocs
lsr.l #8,d3 ;/256
lsr.l #2,d3
divs #64,d3
swap d3
move.w #64-1,d4
sub.w d3,d4
; bfexts d4{26:4},d6
; bfins d6,d2{28:4}
; bfexts d4{30:2},d6
; bfins d6,d2{22:2}
; bfexts d4{24:2},d6
; bfins d6,d2{20:2} ;bitshift $102
bfexts d4{26:2},d6
bfins d6,d2{20:2}
bfexts d4{28:4},d6
bfins d6,d2{28:4}
endc
clr.w d3
swap d3
ifd ocs
lsl.l #1,d3 ;*2
endc
ifnd ocs
lsl.l #3,d3 ;*8
endc
add.l d3,d1 ;raw+x
rotget.ci3
add.l 8(a2),d0 ;+ sinusadd
cmp.l #rotsin.e-rotsin,d0
blt rotget.bb
sub.l #rotsin.e-rotsin,d0
rotget.bb
move.l d0,(a2) ;return position
move.l 4(a2),d0 ;get current y-pos
clr.l d3
move.w (a3,d0),d3 ;get sinus value
clr.l d4
move.w pic_hgt(a1),d4 ;pic heigth
move.l #vew_hgt,d7
cmp.b #50,var_ntsc(a0) ;ntsc check
beq rotget.pal
sub.l #56,d7
rotget.pal
btst #2,pic_vew(a1)
beq rotget.cc
add.l d7,d7
rotget.cc
cmp.w d7,d4 ;smaller than view ?
ble rotget.ci
sub.l d7,d4 ;-vewheigth
cmp.w #0,d4 ;<0 ?
bge rotget.ca
clr.l d4
rotget.ca
muls d4,d3
lsr.l #8,d3 ;/1024
lsr.l #2,d3
clr.l d4
move.w pic_wid(a1),d4 ;*width
muls pic_dpt(a1),d4 ;*depth
muls d4,d3
add.l d3,d1 ;raw+y
rotget.ci
add.l 12(a2),d0 ;+ sinusadd
cmp.l #rotsin.e-rotsin,d0
blt rotget.c
sub.l #rotsin.e-rotsin,d0
rotget.c
move.l d0,4(a2) ;return position
movem.l (sp)+,d3-d7/a0-a6
rts
rotlop
movem.l d0-d7/a0-a6,-(sp)
move.l var_rottrg(a0),a4 ;opnieuw getriggerd ?
tst.b (a4)
beq rotlop.nonewset
clr.b (a4)
clr.l rotcolpos-rot(a5) ;fade position
move.l var_cols1(a0),a1
move.l var_cols1+4(a0),a2
cmp.l #0,a1 ;picture ?
beq rotlop.nonewset
cmp.l #0,a2 ;picture ?
beq rotlop.nonewset
cmp.l a1,a2 ;zelfde ?
beq rotlop.nonewset
move.w 4(a1),d1
cmp.w 4(a2),d1 ;aantal kleuren gelijk ?
bne rotlop.nonewset
cmp.w #16-1,d1 ;aantal kleuren 16 ?
bne rotlop.nonewset
move.w #256-1,d1
tst.w d0 ;routinemode = 0 ?
beq rotlop.nonewset
move.l a2,rotcolset1-rot(a5)
move.l a1,rotcolset2-rot(a5)
clr.l rotcolnum-rot(a5) ;aantal kleuren
clr.l rotcolspd-rot(a5)
clr.l rotcolpos-rot(a5)
move.w d1,2+rotcolnum-rot(a5) ;aantal kleuren
move.w d0,2+rotcolspd-rot(a5)
move.w d0,2+rotcolpos-rot(a5)
lea rotpal1,a1
move.w d1,4(a1)
lea rotpal2,a1
move.w d1,4(a1)
move.l rotcolset2-rot(a5),a0 ;start palette
lea 6(a0),a0
lea rotwrk1,a2
rept 2 ;0
move.l (a0),(a2)+
move.l 4(a0),(a2)+
move.l (a0),(a2)+
move.l 4(a0),(a2)+
move.l 8(a0),(a2)+
move.l 12(a0),(a2)+
move.l 8(a0),(a2)+
move.l 12(a0),(a2)+
endr
rept 2
move.l 16(a0),(a2)+
move.l 20(a0),(a2)+
move.l 16(a0),(a2)+
move.l 20(a0),(a2)+
move.l 24(a0),(a2)+
move.l 28(a0),(a2)+
move.l 24(a0),(a2)+
move.l 28(a0),(a2)+
endr
rept 2
move.l (a0),(a2)+
move.l 4(a0),(a2)+
move.l (a0),(a2)+
move.l 4(a0),(a2)+
move.l 8(a0),(a2)+
move.l 12(a0),(a2)+
move.l 8(a0),(a2)+
move.l 12(a0),(a2)+
endr
rept 2
move.l 16(a0),(a2)+
move.l 20(a0),(a2)+
move.l 16(a0),(a2)+
move.l 20(a0),(a2)+
move.l 24(a0),(a2)+
move.l 28(a0),(a2)+
move.l 24(a0),(a2)+
move.l 28(a0),(a2)+
endr
rept 2 ;1
move.l 32(a0),(a2)+
move.l 36(a0),(a2)+
move.l 32(a0),(a2)+
move.l 36(a0),(a2)+
move.l 40(a0),(a2)+
move.l 44(a0),(a2)+
move.l 40(a0),(a2)+
move.l 44(a0),(a2)+
endr
rept 2
move.l 48(a0),(a2)+
move.l 52(a0),(a2)+
move.l 48(a0),(a2)+
move.l 52(a0),(a2)+
move.l 56(a0),(a2)+
move.l 60(a0),(a2)+
move.l 56(a0),(a2)+
move.l 60(a0),(a2)+
endr
rept 2
move.l 32(a0),(a2)+
move.l 36(a0),(a2)+
move.l 32(a0),(a2)+
move.l 36(a0),(a2)+
move.l 40(a0),(a2)+
move.l 44(a0),(a2)+
move.l 40(a0),(a2)+
move.l 44(a0),(a2)+
endr
rept 2
move.l 48(a0),(a2)+
move.l 52(a0),(a2)+
move.l 48(a0),(a2)+
move.l 52(a0),(a2)+
move.l 56(a0),(a2)+
move.l 60(a0),(a2)+
move.l 56(a0),(a2)+
move.l 60(a0),(a2)+
endr
rept 2 ;2
move.l (a0),(a2)+
move.l 4(a0),(a2)+
move.l (a0),(a2)+
move.l 4(a0),(a2)+
move.l 8(a0),(a2)+
move.l 12(a0),(a2)+
move.l 8(a0),(a2)+
move.l 12(a0),(a2)+
endr
rept 2
move.l 16(a0),(a2)+
move.l 20(a0),(a2)+
move.l 16(a0),(a2)+
move.l 20(a0),(a2)+
move.l 24(a0),(a2)+
move.l 28(a0),(a2)+
move.l 24(a0),(a2)+
move.l 28(a0),(a2)+
endr
rept 2
move.l (a0),(a2)+
move.l 4(a0),(a2)+
move.l (a0),(a2)+
move.l 4(a0),(a2)+
move.l 8(a0),(a2)+
move.l 12(a0),(a2)+
move.l 8(a0),(a2)+
move.l 12(a0),(a2)+
endr
rept 2
move.l 16(a0),(a2)+
move.l 20(a0),(a2)+
move.l 16(a0),(a2)+
move.l 20(a0),(a2)+
move.l 24(a0),(a2)+
move.l 28(a0),(a2)+
move.l 24(a0),(a2)+
move.l 28(a0),(a2)+
endr
rept 2 ;3
move.l 32(a0),(a2)+
move.l 36(a0),(a2)+
move.l 32(a0),(a2)+
move.l 36(a0),(a2)+
move.l 40(a0),(a2)+
move.l 44(a0),(a2)+
move.l 40(a0),(a2)+
move.l 44(a0),(a2)+
endr
rept 2
move.l 48(a0),(a2)+
move.l 52(a0),(a2)+
move.l 48(a0),(a2)+
move.l 52(a0),(a2)+
move.l 56(a0),(a2)+
move.l 60(a0),(a2)+
move.l 56(a0),(a2)+
move.l 60(a0),(a2)+
endr
rept 2
move.l 32(a0),(a2)+
move.l 36(a0),(a2)+
move.l 32(a0),(a2)+
move.l 36(a0),(a2)+
move.l 40(a0),(a2)+
move.l 44(a0),(a2)+
move.l 40(a0),(a2)+
move.l 44(a0),(a2)+
endr
rept 2
move.l 48(a0),(a2)+
move.l 52(a0),(a2)+
move.l 48(a0),(a2)+
move.l 52(a0),(a2)+
move.l 56(a0),(a2)+
move.l 60(a0),(a2)+
move.l 56(a0),(a2)+
move.l 60(a0),(a2)+
endr
lea rotwrk1,a0
lea pal1r,a1
lea pal1g,a2
lea pal1b,a3
bsr getcol
move.l rotcolset1-rot(a5),a0
lea 6(a0),a0
lea rotwrk1,a2
rept 2 ;0
move.l (a0),(a2)+
move.l (a0),(a2)+
move.l 4(a0),(a2)+
move.l 4(a0),(a2)+
endr
rept 2
move.l 8(a0),(a2)+
move.l 8(a0),(a2)+
move.l 12(a0),(a2)+
move.l 12(a0),(a2)+
endr
rept 2
move.l (a0),(a2)+
move.l (a0),(a2)+
move.l 4(a0),(a2)+
move.l 4(a0),(a2)+
endr
rept 2
move.l 8(a0),(a2)+
move.l 8(a0),(a2)+
move.l 12(a0),(a2)+
move.l 12(a0),(a2)+
endr
rept 2 ;1
move.l 16(a0),(a2)+
move.l 16(a0),(a2)+
move.l 20(a0),(a2)+
move.l 20(a0),(a2)+
endr
rept 2
move.l 24(a0),(a2)+
move.l 24(a0),(a2)+
move.l 28(a0),(a2)+
move.l 28(a0),(a2)+
endr
rept 2
move.l 16(a0),(a2)+
move.l 16(a0),(a2)+
move.l 20(a0),(a2)+
move.l 20(a0),(a2)+
endr
rept 2
move.l 24(a0),(a2)+
move.l 24(a0),(a2)+
move.l 28(a0),(a2)+
move.l 28(a0),(a2)+
endr
rept 2 ;2
move.l (a0),(a2)+
move.l (a0),(a2)+
move.l 4(a0),(a2)+
move.l 4(a0),(a2)+
endr
rept 2
move.l 8(a0),(a2)+
move.l 8(a0),(a2)+
move.l 12(a0),(a2)+
move.l 12(a0),(a2)+
endr
rept 2
move.l (a0),(a2)+
move.l (a0),(a2)+
move.l 4(a0),(a2)+
move.l 4(a0),(a2)+
endr
rept 2
move.l 8(a0),(a2)+
move.l 8(a0),(a2)+
move.l 12(a0),(a2)+
move.l 12(a0),(a2)+
endr
rept 2 ;3
move.l 16(a0),(a2)+
move.l 16(a0),(a2)+
move.l 20(a0),(a2)+
move.l 20(a0),(a2)+
endr
rept 2
move.l 24(a0),(a2)+
move.l 24(a0),(a2)+
move.l 28(a0),(a2)+
move.l 28(a0),(a2)+
endr
rept 2
move.l 16(a0),(a2)+
move.l 16(a0),(a2)+
move.l 20(a0),(a2)+
move.l 20(a0),(a2)+
endr
rept 2
move.l 24(a0),(a2)+
move.l 24(a0),(a2)+
move.l 28(a0),(a2)+
move.l 28(a0),(a2)+
endr
rept 2 ;4
move.l 32(a0),(a2)+
move.l 32(a0),(a2)+
move.l 36(a0),(a2)+
move.l 36(a0),(a2)+
endr
rept 2
move.l 40(a0),(a2)+
move.l 40(a0),(a2)+
move.l 44(a0),(a2)+
move.l 44(a0),(a2)+
endr
rept 2
move.l 32(a0),(a2)+
move.l 32(a0),(a2)+
move.l 36(a0),(a2)+
move.l 36(a0),(a2)+
endr
rept 2
move.l 40(a0),(a2)+
move.l 40(a0),(a2)+
move.l 44(a0),(a2)+
move.l 44(a0),(a2)+
endr
rept 2 ;5
move.l 48(a0),(a2)+
move.l 48(a0),(a2)+
move.l 52(a0),(a2)+
move.l 52(a0),(a2)+
endr
rept 2
move.l 56(a0),(a2)+
move.l 56(a0),(a2)+
move.l 60(a0),(a2)+
move.l 60(a0),(a2)+
endr
rept 2
move.l 48(a0),(a2)+
move.l 48(a0),(a2)+
move.l 52(a0),(a2)+
move.l 52(a0),(a2)+
endr
rept 2
move.l 56(a0),(a2)+
move.l 56(a0),(a2)+
move.l 60(a0),(a2)+
move.l 60(a0),(a2)+
endr
rept 2 ;6
move.l 32(a0),(a2)+
move.l 32(a0),(a2)+
move.l 36(a0),(a2)+
move.l 36(a0),(a2)+
endr
rept 2
move.l 40(a0),(a2)+
move.l 40(a0),(a2)+
move.l 44(a0),(a2)+
move.l 44(a0),(a2)+
endr
rept 2
move.l 32(a0),(a2)+
move.l 32(a0),(a2)+
move.l 36(a0),(a2)+
move.l 36(a0),(a2)+
endr
rept 2
move.l 40(a0),(a2)+
move.l 40(a0),(a2)+
move.l 44(a0),(a2)+
move.l 44(a0),(a2)+
endr
rept 2 ;7
move.l 48(a0),(a2)+
move.l 48(a0),(a2)+
move.l 52(a0),(a2)+
move.l 52(a0),(a2)+
endr
rept 2
move.l 56(a0),(a2)+
move.l 56(a0),(a2)+
move.l 60(a0),(a2)+
move.l 60(a0),(a2)+
endr
rept 2
move.l 48(a0),(a2)+
move.l 48(a0),(a2)+
move.l 52(a0),(a2)+
move.l 52(a0),(a2)+
endr
rept 2
move.l 56(a0),(a2)+
move.l 56(a0),(a2)+
move.l 60(a0),(a2)+
move.l 60(a0),(a2)+
endr
lea rotwrk1,a0
lea pal2r,a1
lea pal2g,a2
lea pal2b,a3
bsr getcol
move.l rotcolspd-rot(a5),d3 ;fade speed
move.l rotcolnum-rot(a5),d2 ;aantal kleuren
move.l a5,-(sp)
lea pal1r,a0 ;calculate add-step
lea pal2r,a1
lea pal1g,a2
lea pal2g,a3
lea pal1b,a4
lea pal2b,a5
getadd.a
move.l (a0)+,d0
move.l (a1)+,d1
sub.l d0,d1
divs d3,d1
ext.l d1
move.l d1,-4(a1)
move.l (a2)+,d0
move.l (a3)+,d1
sub.l d0,d1
divs d3,d1
ext.l d1
move.l d1,-4(a3)
move.l (a4)+,d0
move.l (a5)+,d1
sub.l d0,d1
divs d3,d1
ext.l d1
move.l d1,-4(a5)
dbra d2,getadd.a
move.l (sp)+,a5
rotlop.nonewset
tst.l rotcolpos-rot(a5) ;fade position
beq rotlop.end
sub.l #1,rotcolpos-rot(a5) ;fade position
lea rotpal1,a6 ;palette 1
move.l rotbuf2-rot(a5),d1 ;double buffering
add.l d1,a6
add.l #6,a6
move.l rotcolnum-rot(a5),d4 ;aantal kleuren
move.l a5,-(sp)
lea pal1r,a0
lea pal2r,a1
lea pal1g,a2
lea pal2g,a3
lea pal1b,a4
lea pal2b,a5
getpal.a
move.l (a0)+,d0
move.l (a1)+,d1
add.l d1,d0
move.l d0,-4(a0)
lsr.l #7,d0
ifnd ocs
bfexts d0{24:4},d1
bfins d1,-2(a6){20:4}
bfexts d0{28:4},d1
bfins d1,(a6){20:4}
endc
ifd ocs
lsl.w #4,d0
and.w #$f00,d0
move.w d0,d2
endc
move.l (a2)+,d0
move.l (a3)+,d1
add.l d1,d0
move.l d0,-4(a2)
lsr.l #7,d0
ifnd ocs
bfexts d0{24:4},d1
bfins d1,-2(a6){24:4}
bfexts d0{28:4},d1
bfins d1,(a6){24:4}
endc
ifd ocs
and.w #$0f0,d0
or.w d0,d2
endc
move.l (a4)+,d0
move.l (a5)+,d1
add.l d1,d0
move.l d0,-4(a4)
lsr.l #7,d0
ifnd ocs
bfexts d0{24:4},d1
bfins d1,-2(a6){28:4}
bfexts d0{28:4},d1
bfins d1,(a6){28:4}
add.l #4,a6
endc
ifd ocs
lsr.w #4,d0
and.w #$00f,d0
or.w d0,d2
move.w d2,(a6)+
endc
dbra d4,getpal.a
move.l (sp)+,a5
rotlop.end
movem.l (sp)+,d0-d7/a0-a6
rts
getcol
movem.l d0-d7/a0-a6,-(sp)
move.l rotcolnum-rot(a5),d0 ;aantal kleuren
getcol.a
clr.l d1 ;get red
ifnd ocs
bfexts (a0){4:4},d2
bfins d2,d1{24:4}
bfexts (a0){20:4},d2
bfins d2,d1{28:4}
endc
ifd ocs
move.w (a0)+,d2
move.w d2,d1
and.w #$f00,d1
lsr.w #4,d1
endc
lsl.l #7,d1
move.l d1,(a1)
add.l #4,a1
clr.l d1 ;get green
ifnd ocs
bfexts (a0){8:4},d2
bfins d2,d1{24:4}
bfexts (a0){24:4},d2
bfins d2,d1{28:4}
endc
ifd ocs
move.w d2,d1
and.w #$0f0,d1
endc
lsl.l #7,d1
move.l d1,(a2)
add.l #4,a2
clr.l d1 ;get blue
ifnd ocs
bfexts (a0){12:4},d2
bfins d2,d1{24:4}
bfexts (a0){28:4},d2
bfins d2,d1{28:4}
endc
ifd ocs
move.w d2,d1
and.w #$00f,d1
lsl.w #4,d1
endc
lsl.l #7,d1
move.l d1,(a3)
add.l #4,a3
ifnd ocs
add.l #4,a0
endc
dbra d0,getcol.a
movem.l (sp)+,d0-d7/a0-a6
rts
rotchp dc.l 0
rotbuf2 dc.l 0
rotcolset1 dc.l 0
rotcolset2 dc.l 0
rotcolspd dc.l 0
rotcolnum dc.l 0
rotcolpos dc.l 0
rotbuf dc.l 0
rotshp1 dc.l 0
rotshp2 dc.l 0
; posx posy spdx spdy
rotshptab
rept 2
dc.l 0, 0, 0, 0 ;0 stil
dc.l 0, 0, 2, 0 ;1 -
dc.l 0, 0, 0, 2 ;2 |
dc.l 0, 180*2, 2, 2 ;3 o
dc.l 180*2, 0, 2, 4 ;4 (X)
dc.l 0, 180*2, 4, 2 ;5 8
dc.l 0, 180*2, 4, 6 ;6 weird
dc.l 0, 0, 0, 0 ;7
dc.l 0, 0, 0, 0 ;8
dc.l 0, 0, 0, 0 ;9
dc.l 0, 0, 0, 0 ;10
dc.l 0, 0, 0, 0 ;11
dc.l 0, 0, 0, 0 ;12
dc.l 0, 0, 0, 0 ;13
dc.l 0, 0, 0, 0 ;14
dc.l 0, 0, 0, 0 ;15
endr
rotsin
dc.w 512,516,521,525,530,534,539,543,548,552,557,561
dc.w 565,570,574,579,583,588,592,596,601,605,610,614
dc.w 618,623,627,631,636,640,644,649,653,657,661,666
dc.w 670,674,678,683,687,691,695,699,703,708,712,716
dc.w 720,724,728,732,736,740,744,748,752,756,760,764
dc.w 768,771,775,779,783,787,790,794,798,801,805,809
dc.w 812,816,820,823,827,830,834,837,840,844,847,851
dc.w 854,857,861,864,867,870,873,876,880,883,886,889
dc.w 892,895,898,901,903,906,909,912,915,917,920,923
dc.w 925,928,931,933,936,938,941,943,945,948,950,952
dc.w 955,957,959,961,963,965,967,969,971,973,975,977
dc.w 979,981,982,984,986,987,989,991,992,994,995,997
dc.w 998,999,1001,1002,1003,1004,1006,1007,1008,1009,1010,1011
dc.w 1012,1013,1014,1014,1015,1016,1017,1017,1018,1019,1019,1020
dc.w 1020,1021,1021,1021,1022,1022,1022,1023,1023,1023,1023,1023
dc.w 1023,1023,1023,1023,1023,1023,1022,1022,1022,1021,1021,1021
dc.w 1020,1020,1019,1019,1018,1017,1017,1016,1015,1014,1014,1013
dc.w 1012,1011,1010,1009,1008,1007,1006,1004,1003,1002,1001,999
dc.w 998,997,995,994,992,991,989,987,986,984,982,981
dc.w 979,977,975,973,971,969,967,965,963,961,959,957
dc.w 955,952,950,948,945,943,941,938,936,933,931,928
dc.w 925,923,920,917,915,912,909,906,903,901,898,895
dc.w 892,889,886,883,880,876,873,870,867,864,861,857
dc.w 854,851,847,844,840,837,834,830,827,823,820,816
dc.w 812,809,805,801,798,794,790,787,783,779,775,771
dc.w 768,764,760,756,752,748,744,740,736,732,728,724
dc.w 720,716,712,708,703,699,695,691,687,683,678,674
dc.w 670,666,661,657,653,649,644,640,636,631,627,623
dc.w 618,614,610,605,601,596,592,588,583,579,574,570
dc.w 565,561,557,552,548,543,539,534,530,525,521,516
dc.w 512,508,503,499,494,490,485,481,476,472,467,463
dc.w 459,454,450,445,441,436,432,428,423,419,414,410
dc.w 406,401,397,393,388,384,380,375,371,367,363,358
dc.w 354,350,346,341,337,333,329,325,321,316,312,308
dc.w 304,300,296,292,288,284,280,276,272,268,264,260
dc.w 257,253,249,245,241,237,234,230,226,223,219,215
dc.w 212,208,204,201,197,194,190,187,184,180,177,173
dc.w 170,167,163,160,157,154,151,148,144,141,138,135
dc.w 132,129,126,123,121,118,115,112,109,107,104,101
dc.w 99,96,93,91,88,86,83,81,79,76,74,72
dc.w 69,67,65,63,61,59,57,55,53,51,49,47
dc.w 45,43,42,40,38,37,35,33,32,30,29,27
dc.w 26,25,23,22,21,20,18,17,16,15,14,13
dc.w 12,11,10,10,9,8,7,7,6,5,5,4
dc.w 4,3,3,3,2,2,2,1,1,1,1,1
dc.w 1,1,1,1,1,1,2,2,2,3,3,3
dc.w 4,4,5,5,6,7,7,8,9,10,10,11
dc.w 12,13,14,15,16,17,18,20,21,22,23,25
dc.w 26,27,29,30,32,33,35,37,38,40,42,43
dc.w 45,47,49,51,53,55,57,59,61,63,65,67
dc.w 69,72,74,76,79,81,83,86,88,91,93,96
dc.w 99,101,104,107,109,112,115,118,121,123,126,129
dc.w 132,135,138,141,144,148,151,154,157,160,163,167
dc.w 170,173,177,180,184,187,190,194,197,201,204,208
dc.w 212,215,219,223,226,230,234,237,241,245,249,253
dc.w 256,260,264,268,272,276,280,284,288,292,296,300
dc.w 304,308,312,316,321,325,329,333,337,341,346,350
dc.w 354,358,363,367,371,375,380,384,388,393,397,401
dc.w 406,410,414,419,423,428,432,436,441,445,450,454
dc.w 459,463,467,472,476,481,485,490,494,499,503,508
dc.w 512
rotsin.e
cnop 0,8
rotwrk1 ds.l 256
pal1r ds.l 256
pal1g ds.l 256
pal1b ds.l 256
pal2r ds.l 256
pal2g ds.l 256
pal2b ds.l 256
rotpal1
dc.l 'PALE'
dc.w 0
ifnd ocs
ds.l 256
endc
ifd ocs
ds.w 256
endc
rotpal2
dc.l 'PALE'
dc.w 0
ifnd ocs
ds.l 256
endc
ifd ocs
ds.w 256
endc
rotpal_l equ rotpal2-rotpal1
rotp.e
SECTION 4,CODE_c
cnop 0,8
rotc
ifd ocs
dc.l 'ROTO'
endc
ifnd ocs
dc.l 'ROTA'
endc
rts
cnop 0,8
rotcop.1
dc.w $0080,$0000,$0082,$0000
dc.w $0102,$0000
dc.w $00e0,$0000,$00e2,$0000 ;1
dc.w $00e4,$0000,$00e6,$0000 ;2
dc.w $00e8,$0000,$00ea,$0000 ;3
dc.w $00ec,$0000,$00ee,$0000 ;4
dc.w $00f0,$0000,$00f2,$0000 ;5
dc.w $00f4,$0000,$00f6,$0000 ;6
ifnd ocs
dc.w $00f8,$0000,$00fa,$0000 ;7
dc.w $00fc,$0000,$00fe,$0000 ;8
endc
dc.w $0100,$0010
dc.w $0088,$0000
dc.w $ffff,$fffe
rotcop.2
dc.w $0080,$0000,$0082,$0000
dc.w $0102,$0000
dc.w $00e0,$0000,$00e2,$0000 ;1
dc.w $00e4,$0000,$00e6,$0000 ;2
dc.w $00e8,$0000,$00ea,$0000 ;3
dc.w $00ec,$0000,$00ee,$0000 ;4
dc.w $00f0,$0000,$00f2,$0000 ;5
dc.w $00f4,$0000,$00f6,$0000 ;6
ifnd ocs
dc.w $00f8,$0000,$00fa,$0000 ;7
dc.w $00fc,$0000,$00fe,$0000 ;8
endc
dc.w $0100,$0010
dc.w $0088,$0000
dc.w $ffff,$fffe
rotc.e
rot.e
;**********************************************************************
;and here are the incbin-files....
ifd rout
cnop 0,8
rotincpic1
ifd ocs
incbin 'w:effect/circles512_l4.pic'
endc
ifnd ocs
incbin 'w:effectaga/act_16.bru'
endc
cnop 0,8
rotincpic2
ifnd ocs
incbin 'w:effectaga/caveman_16.bru'
endc
endc